<?php
namespace app\admin\controller;

use think\Controller;
use think\Config;
use think\Db;
use think\Validate;
use think\Request;
use app\admin\model\Admin;

class Base extends Controller
{
    public function _initialize()
    {
        $request = Request::instance();

        if (!session('?admin_info')) {
            return $this->redirect('admin/login/index');
        }

        //设置权限白名单
        $white_list = [
            'admin/index/index',    //后台控制台
            'admin/index/uploadFile',   //上传图片
            'admin/admin/modify_info',  //修改我的信息
            'admin/admin/modify_pass',  //修改登录密码
            'admin/admin/my',  //我的设置
            'admin/wechat/tuwen_list',  //获取素材
            // 'admin/accesses/assmy',  //权限管理组
        ];

        $this->user = Admin::alias('a')->where('a.id', session('admin_info.id'))
            ->join('d_roles r', 'r.id = a.role_id', 'LEFT')
        	->field('a.id, a.username, a.nick, a.end_time, a.create_at, a.ip, a.portrait, a.role_id, r.role_accesses')
        	->find();

        $this->regtype = ['默认', '入会来源', '行业/职业', '学历'];

        //将权限字符串转为数组格式
        $accessesArray = explode(",", $this->user->role_accesses);

        foreach ($accessesArray as $key => $value) {
            //将于用户的角色转为小写
            $accessesArray[$key] = strtolower($value);
        }
        //需合并白名单中的权限
        $this->accessesArray = array_merge($white_list, $accessesArray);   //该变量赋值形式用于过滤左侧菜单

        // dd($this->accessesArray);

        //判断权限
        //获取当前的访问路由
        $action_url = $this->get_action_url();

        
        //过滤权限白名单
        // if(in_array($action_url, $white_list)){
        //     return true;
        // }

        // 如果是特定的超级管理员的话直接退出判断
        if ($this->user->role_id == 0) {
            return true;
        }
        


        if (!in_array($action_url, $accessesArray)) {   
            $is_ax = $request->isAjax();
            if($is_ax){
                //判断是不是ajax操作
                $res = array(
                    'code' => 1,
                    'message' => '您无权操作',
                    'data' => []
                );
                echo json_encode($res, true);
                exit;
            }

            //无权限的情况，正常跳转页面的情况
            $this->error('您无权限访问');
        }
    }

    //获取左侧菜单
    public function getMenuArr()
    {
        $menuArr = include APP_PATH.'admin/conf/menu.php';
// return $menuArr;
        //判断如果是超级管理员的话直接返回所有的菜单
        if($this->user->role_id == 0){
            return $menuArr;
        }
        //下面是过滤左侧菜单的逻辑
        foreach ($menuArr as $key => $value) {
            // dump($value['url']);
            // dump($this->accessesArray);
            //先判断一级菜单的情况,读取菜单配置文件的时候，要去掉第一个‘/’，然后再判断
            if(!in_array(substr($value['url'], 1), $this->accessesArray)){
                unset($menuArr[$key]);
            }

            //判断二级菜单
            foreach ($value['child'] as $k => $v) {
                if(!in_array(substr($v['act'], 1), $this->accessesArray)){
                    unset($menuArr[$key]['child'][$k]);
                }
            }
        }
        // exit();
            
        return $menuArr;
    }

    /**
     * 获取当前访问路由
     * @param $Request
     * @return string
     */
    public function get_action_url()
    {
        $request = \think\Request::instance();
        $access = strtolower($request->module()).'/'.strtolower($request->controller()).'/'.strtolower($request->action());

        return $access;

        // $module     = request()->module();
        // $controller = request()->controller();
        // $action     = request()->action();
        // $url        = $module.'/'.$controller.'/'.$action;
        // return strtolower($url);
    }
}
